ãã¹ãã«ãã¬ããžã®ã¡ããªã¯ã¹ãšãã®éçãçè§£ãããœãããŠã§ã¢å質åäžã®ããã«å¹æçã«æŽ»çšããæ¹æ³ãåŠã³ãŸããæ§ã ãªã«ãã¬ããžã®çš®é¡ããã¹ããã©ã¯ãã£ã¹ãäžè¬çãªèœãšã穎ã«ã€ããŠã解説ããŸãã
ãã¹ãã«ãã¬ããžïŒãœãããŠã§ã¢å質ã®ããã®ææçŸ©ãªã¡ããªã¯ã¹
ãœãããŠã§ã¢éçºã®ãã€ãããã¯ãªäžçã«ãããŠãå質ã®ç¢ºä¿ã¯æãéèŠã§ãããã¹ãã«ãã¬ããžã¯ããã¹ãäžã«å®è¡ããããœãŒã¹ã³ãŒãã®å²åã瀺ãã¡ããªã¯ã¹ã§ããããã®ç®æšãéæããäžã§éèŠãªåœ¹å²ãæãããŸããããããåã«é«ããã¹ãã«ãã¬ããžçãç®æãã ãã§ã¯äžååã§ããç§ãã¡ã¯ããœãããŠã§ã¢ã®å ç¢æ§ãšä¿¡é Œæ§ãçã«åæ ããææçŸ©ãªã¡ããªã¯ã¹ã远æ±ããªããã°ãªããŸããããã®èšäºã§ã¯ãæ§ã ãªçš®é¡ã®ãã¹ãã«ãã¬ããžããã®å©ç¹ãšéçããããŠé«å質ãªãœãããŠã§ã¢ãæ§ç¯ããããã«ãããã广çã«æŽ»çšããããã®ãã¹ããã©ã¯ãã£ã¹ã«ã€ããŠæ¢æ±ããŸãã
ãã¹ãã«ãã¬ããžãšã¯ïŒ
ãã¹ãã«ãã¬ããžã¯ããœãããŠã§ã¢ã®ãã¹ãããã»ã¹ãã³ãŒãããŒã¹ãã©ã®çšåºŠå®è¡ããããå®éåãããã®ã§ããããã¯åºæ¬çã«ããã¹ãå®è¡æã«å®è¡ãããã³ãŒãã®å²åãæž¬å®ããŸãããã¹ãã«ãã¬ããžã¯éåžžãããŒã»ã³ããŒãžã§è¡šãããŸããäžè¬çã«ãããŒã»ã³ããŒãžãé«ãã»ã©ãã培åºçãªãã¹ãããã»ã¹ã瀺åããŸãããåŸè¿°ããããã«ãããã¯ãœãããŠã§ã¢å質ã®å®ç§ãªææšã§ã¯ãããŸããã
ãªããã¹ãã«ãã¬ããžã¯éèŠãªã®ãïŒ
- æªãã¹ãé åã®ç¹å®ïŒ ãã¹ãã«ãã¬ããžã¯ããã¹ããããŠããªãã³ãŒãã®ã»ã¯ã·ã§ã³ãæµ®ã圫ãã«ããå質ä¿èšŒããã»ã¹ã«ãããæœåšçãªæ»è§ãæããã«ããŸãã
- ãã¹ãã®æå¹æ§ã«é¢ããæŽå¯ã®æäŸïŒ ã«ãã¬ããžã¬ããŒããåæããããšã§ãéçºè ã¯ãã¹ãã¹ã€ãŒãã®å¹çãè©äŸ¡ããæ¹åãã¹ãé åãç¹å®ã§ããŸãã
- ãªã¹ã¯è»œæžã®ãµããŒãïŒ ã³ãŒãã®ã©ã®éšåãååã«ãã¹ããããã©ã®éšåãããã§ãªãããçè§£ããããšã§ãããŒã ã¯ãã¹ãäœæ¥ã«åªå é äœãä»ããæœåšçãªãªã¹ã¯ã軜æžã§ããŸãã
- ã³ãŒãã¬ãã¥ãŒã®ä¿é²ïŒ ã«ãã¬ããžã¬ããŒãã¯ã³ãŒãã¬ãã¥ãŒäžã«è²ŽéãªããŒã«ãšããŠäœ¿çšã§ããã¬ãã¥ã¢ãŒããã¹ãã«ãã¬ããžã®äœãé åã«éäžããã®ãå©ããŸãã
- ããè¯ãã³ãŒãèšèšã®å¥šå±ïŒ ã³ãŒãã®ãã¹ãŠã®åŽé¢ãã«ããŒãããã¹ããäœæããå¿ èŠæ§ã¯ãããã¢ãžã¥ãŒã«åããããã¹ãå¯èœã§ãä¿å®ããããèšèšã«ã€ãªãããŸãã
ãã¹ãã«ãã¬ããžã®çš®é¡
ããã€ãã®çš®é¡ã®ãã¹ãã«ãã¬ããžã¡ããªã¯ã¹ã¯ããã¹ãã®å®å šæ§ã«ã€ããŠç°ãªãèŠç¹ãæäŸããŸããããã§ã¯ãæãäžè¬çãªãã®ãããã€ã玹ä»ããŸãïŒ
1. åœä»€ç¶²çŸ (ã¹ããŒãã¡ã³ãã«ãã¬ããž)
å®çŸ©ïŒ åœä»€ç¶²çŸ ã¯ãã³ãŒãå ã®å®è¡å¯èœãªåœä»€ã®ãã¡ããã¹ãã¹ã€ãŒãã«ãã£ãŠå®è¡ããããã®ã®å²åãæž¬å®ããŸãã
äŸïŒ
function calculateDiscount(price, hasCoupon) {
let discount = 0;
if (hasCoupon) {
discount = price * 0.1;
}
return price - discount;
}
100%ã®åœä»€ç¶²çŸ ãéæããã«ã¯ã`calculateDiscount`颿°å ã®åã³ãŒãè¡ãå®è¡ãããã¹ãã±ãŒã¹ãå°ãªããšã1ã€å¿ èŠã§ããäŸãã°ïŒ
- ãã¹ãã±ãŒã¹1ïŒ `calculateDiscount(100, true)` (ãã¹ãŠã®åœä»€ãå®è¡)
éçïŒ åœä»€ç¶²çŸ ã¯åºæ¬çãªã¡ããªã¯ã¹ã§ããã培åºçãªãã¹ããä¿èšŒãããã®ã§ã¯ãããŸãããæææ±ºå®ããžãã¯ãè©äŸ¡ããããç°ãªãå®è¡ãã¹ã广çã«åŠçãããã¯ããŸããããã¹ãã¹ã€ãŒãã¯ãéèŠãªãšããžã±ãŒã¹ãè«çãšã©ãŒãèŠéããªãããã100%ã®åœä»€ç¶²çŸ ãéæããããšãå¯èœã§ãã
2. åå²ç¶²çŸ (ãã·ãžã§ã³ã«ãã¬ããž)
å®çŸ©ïŒ åå²ç¶²çŸ ã¯ãã³ãŒãå ã®æ±ºå®åå²ïŒäŸïŒ`if`æã`switch`æïŒã®ãã¡ããã¹ãã¹ã€ãŒãã«ãã£ãŠå®è¡ããããã®ã®å²åãæž¬å®ããŸããããã«ããã忡件ã®`true`ãš`false`ã®äž¡æ¹ã®çµæããã¹ããããããšãä¿èšŒãããŸãã
äŸ (äžèšãšåã颿°ã䜿çš)ïŒ
function calculateDiscount(price, hasCoupon) {
let discount = 0;
if (hasCoupon) {
discount = price * 0.1;
}
return price - discount;
}
100%ã®åå²ç¶²çŸ ãéæããã«ã¯ã2ã€ã®ãã¹ãã±ãŒã¹ãå¿ èŠã§ãïŒ
- ãã¹ãã±ãŒã¹1ïŒ `calculateDiscount(100, true)` (`if`ãããã¯ããã¹ã)
- ãã¹ãã±ãŒã¹2ïŒ `calculateDiscount(100, false)` (`else`ãŸãã¯ããã©ã«ããã¹ããã¹ã)
éçïŒ åå²ç¶²çŸ ã¯åœä»€ç¶²çŸ ãããå ç¢ã§ãããããã§ããã¹ãŠã®å¯èœãªã·ããªãªãã«ããŒããããã§ã¯ãããŸãããè€æ°ã®ç¯ãæã€æ¡ä»¶ããæ¡ä»¶ãè©äŸ¡ãããé åºã¯èæ ®ãããŸããã
3. æ¡ä»¶ç¶²çŸ (ã³ã³ãã£ã·ã§ã³ã«ãã¬ããž)
å®çŸ©ïŒ æ¡ä»¶ç¶²çŸ ã¯ãæ¡ä»¶å ã®åããŒã«éšååŒãå°ãªããšãäžåºŠã¯`true`ãš`false`ã®äž¡æ¹ãšããŠè©äŸ¡ãããå²åãæž¬å®ããŸãã
äŸïŒ
function processOrder(isVIP, hasLoyaltyPoints) {
if (isVIP && hasLoyaltyPoints) {
// Apply special discount
}
// ...
}
100%ã®æ¡ä»¶ç¶²çŸ ãéæããã«ã¯ã以äžã®ãã¹ãã±ãŒã¹ãå¿ èŠã§ãïŒ
- `isVIP = true`, `hasLoyaltyPoints = true`
- `isVIP = false`, `hasLoyaltyPoints = false`
éçïŒ æ¡ä»¶ç¶²çŸ ã¯è€éãªããŒã«åŒã®åã ã®éšåã察象ãšããŸããããã¹ãŠã®å¯èœãªæ¡ä»¶ã®çµã¿åãããã«ããŒããããã§ã¯ãããŸãããäŸãã°ã`isVIP = true, hasLoyaltyPoints = false`ãš`isVIP = false, hasLoyaltyPoints = true`ã®äž¡æ¹ã®ã·ããªãªãç¬ç«ããŠãã¹ããããããšãä¿èšŒããŸãããããã¯æ¬¡ã®ã«ãã¬ããžã®çš®é¡ã«ã€ãªãããŸãïŒ
4. è€æ°æ¡ä»¶ç¶²çŸ (ãã«ãã³ã³ãã£ã·ã§ã³ã«ãã¬ããž)
å®çŸ©ïŒ ããã¯ã決å®å ã®ãã¹ãŠã®å¯èœãªæ¡ä»¶ã®çµã¿åããããã¹ããããããšã枬å®ããŸãã
äŸïŒ äžèšã®`processOrder`颿°ã䜿çšããŸãã100%ã®è€æ°æ¡ä»¶ç¶²çŸ ãéæããã«ã¯ã以äžãå¿ èŠã§ãïŒ
- `isVIP = true`, `hasLoyaltyPoints = true`
- `isVIP = false`, `hasLoyaltyPoints = false`
- `isVIP = true`, `hasLoyaltyPoints = false`
- `isVIP = false`, `hasLoyaltyPoints = true`
éçïŒ æ¡ä»¶ã®æ°ãå¢ããã«ã€ããŠãå¿ èŠãªãã¹ãã±ãŒã¹ã®æ°ã¯ææ°é¢æ°çã«å¢å ããŸããè€éãªåŒã®å Žåã100%ã®ã«ãã¬ããžãéæããããšã¯éçŸå®çã«ãªãããšããããŸãã
5. çµè·¯ç¶²çŸ (ãã¹ã«ãã¬ããž)
å®çŸ©ïŒ çµè·¯ç¶²çŸ ã¯ãã³ãŒããéãç¬ç«ããå®è¡ãã¹ã®ãã¡ããã¹ãã¹ã€ãŒãã«ãã£ãŠå®è¡ããããã®ã®å²åãæž¬å®ããŸãã颿°ãããã°ã©ã ã®ãšã³ããªãŒãã€ã³ããããšã°ãžãããã€ã³ããŸã§ã®åå¯èœãªã«ãŒãããã¹ãšèŠãªãããŸãã
äŸ (倿Žããã`calculateDiscount`颿°)ïŒ
function calculateDiscount(price, hasCoupon, isEmployee) {
let discount = 0;
if (hasCoupon) {
discount = price * 0.1;
} else if (isEmployee) {
discount = price * 0.05;
}
return price - discount;
}
100%ã®çµè·¯ç¶²çŸ ãéæããã«ã¯ã以äžã®ãã¹ãã±ãŒã¹ãå¿ èŠã§ãïŒ
- ãã¹ãã±ãŒã¹1ïŒ `calculateDiscount(100, true, true)` (æåã®`if`ãããã¯ãå®è¡)
- ãã¹ãã±ãŒã¹2ïŒ `calculateDiscount(100, false, true)` (`else if`ãããã¯ãå®è¡)
- ãã¹ãã±ãŒã¹3ïŒ `calculateDiscount(100, false, false)` (ããã©ã«ããã¹ãå®è¡)
éçïŒ çµè·¯ç¶²çŸ ã¯æãå æ¬çãªæ§é çã«ãã¬ããžã¡ããªã¯ã¹ã§ãããéæããã®ãæãå°é£ã§ããã³ãŒãã®è€éããšãšãã«ãã¹ã®æ°ã¯ææ°é¢æ°çã«å¢å ããå¯èœæ§ããããå®éã«ã¯ãã¹ãŠã®å¯èœãªãã¹ããã¹ãããããšã¯äžå¯èœã§ããäžè¬çã«ãå®äžçã®ã¢ããªã±ãŒã·ã§ã³ã«ã¯ã³ã¹ããé«ããããšèããããŠããŸãã
6. 颿°ã«ãã¬ããž
å®çŸ©ïŒ 颿°ã«ãã¬ããžã¯ãã³ãŒãå ã®é¢æ°ã®ãã¡ããã¹ãäžã«å°ãªããšãäžåºŠåŒã³åºããããã®ã®å²åãæž¬å®ããŸãã
äŸïŒ
function add(a, b) {
return a + b;
}
function subtract(a, b) {
return a - b;
}
// Test Suite
add(5, 3); // Only the add function is called
ãã®äŸã§ã¯ã2ã€ã®é¢æ°ã®ãã¡1ã€ããåŒã³åºãããŠããªãããã颿°ã«ãã¬ããžã¯50%ã«ãªããŸãã
éçïŒ é¢æ°ã«ãã¬ããžã¯ãåœä»€ç¶²çŸ ãšåæ§ã«ãæ¯èŒçåºæ¬çãªã¡ããªã¯ã¹ã§ãã颿°ãåŒã³åºããããã©ããã瀺ããŸããã颿°ã®æ¯ãèããåŒæ°ãšããŠæž¡ãããå€ã«é¢ããæ å ±ã¯æäŸããŸãããå€ãã®å Žåãåºçºç¹ãšããŠäœ¿çšãããŸãããããå®å šãªå šäœåãåŸãããã«ã¯ä»ã®ã«ãã¬ããžã¡ããªã¯ã¹ãšçµã¿åãããã¹ãã§ãã
7. è¡ã«ãã¬ããž
å®çŸ©ïŒ è¡ã«ãã¬ããžã¯åœä»€ç¶²çŸ ã«éåžžã«ãã䌌ãŠããŸãããç©ççãªã³ãŒãè¡ã«çŠç¹ãåœãŠãŸãããã¹ãäžã«äœè¡ã®ã³ãŒããå®è¡ãããããæ°ããŸãã
éçïŒ åœä»€ç¶²çŸ ãšåãéçãç¶æ¿ããŸããããžãã¯ã決å®ç¹ããŸãã¯æœåšçãªãšããžã±ãŒã¹ããã§ãã¯ããŸããã
8. ãšã³ããª/ãšã°ãžãããã€ã³ãã«ãã¬ããž
å®çŸ©ïŒ ããã¯ã颿°ãã³ã³ããŒãã³ãããŸãã¯ã·ã¹ãã ã®ãã¹ãŠã®å¯èœãªãšã³ããªãã€ã³ããšãšã°ãžãããã€ã³ããå°ãªããšãäžåºŠãã¹ãããããã©ãããæž¬å®ããŸãããšã³ããª/ãšã°ãžãããã€ã³ãã¯ãã·ã¹ãã ã®ç¶æ ã«ãã£ãŠç°ãªãå ŽåããããŸãã
éçïŒ é¢æ°ãåŒã³åºãããŠæ»ãå€ãè¿ãããšãä¿èšŒããŸãããå éšããžãã¯ããšããžã±ãŒã¹ã«ã€ããŠã¯äœãèšããŸããã
æ§é çã«ãã¬ããžãè¶ ããŠïŒããŒã¿ãããŒãšãã¥ãŒããŒã·ã§ã³ãã¹ã
äžèšã¯æ§é çã«ãã¬ããžã¡ããªã¯ã¹ã§ãããä»ã«ãéèŠãªçš®é¡ããããŸãããããã®é«åºŠãªãã¯ããã¯ã¯èŠéããããã¡ã§ãããå æ¬çãªãã¹ãã«ã¯äžå¯æ¬ ã§ãã
1. ããŒã¿ãããŒã«ãã¬ããž
å®çŸ©ïŒ ããŒã¿ãããŒã«ãã¬ããžã¯ãã³ãŒããéãããŒã¿ã®æµãã远跡ããããšã«çŠç¹ãåœãŠãŸãã倿°ãããã°ã©ã ã®æ§ã ãªæç¹ã§å®çŸ©ã䜿çšãããå Žåã«ãã£ãŠã¯åå®çŸ©ãŸãã¯æªå®çŸ©ã«ãªãããšãä¿èšŒããŸããããŒã¿èŠçŽ ãšå¶åŸ¡ãããŒã®éã®çžäºäœçšã調ã¹ãŸãã
çš®é¡ïŒ
- å®çŸ©-äœ¿çš (DU) ã«ãã¬ããžïŒ ãã¹ãŠã®å€æ°å®çŸ©ã«å¯ŸããŠããã®å®çŸ©ã®ãã¹ãŠã®å¯èœãªäœ¿çšããã¹ãã±ãŒã¹ã«ãã£ãŠã«ããŒãããããšãä¿èšŒããŸãã
- å šå®çŸ©ã«ãã¬ããžïŒ 倿°ã®ãã¹ãŠã®å®çŸ©ãã«ããŒãããããšãä¿èšŒããŸãã
- å šäœ¿çšã«ãã¬ããžïŒ 倿°ã®ãã¹ãŠã®äœ¿çšãã«ããŒãããããšãä¿èšŒããŸãã
äŸïŒ
function calculateTotal(price, quantity) {
let total = price * quantity; // Definition of 'total'
let tax = total * 0.08; // Use of 'total'
return total + tax; // Use of 'total'
}
ããŒã¿ãããŒã«ãã¬ããžã¯ã`total`倿°ãæ£ããèšç®ãããåŸç¶ã®èšç®ã§äœ¿çšãããããšãä¿èšŒããããã®ãã¹ãã±ãŒã¹ãèŠæ±ããŸãã
éçïŒ ããŒã¿ãããŒã«ãã¬ããžã¯å®è£ ãè€éã«ãªãå¯èœæ§ããããã³ãŒãã®ããŒã¿äŸåæ§ã«é¢ããé«åºŠãªåæãå¿ èŠã§ããäžè¬çã«ãæ§é çã«ãã¬ããžã¡ããªã¯ã¹ãããèšç®ã³ã¹ããé«ããªããŸãã
2. ãã¥ãŒããŒã·ã§ã³ãã¹ã
å®çŸ©ïŒ ãã¥ãŒããŒã·ã§ã³ãã¹ãã¯ããœãŒã¹ã³ãŒãã«å°ããªäººçºçãªãšã©ãŒïŒãã¥ãŒã¿ã³ãïŒãå°å ¥ãããã¹ãã¹ã€ãŒããå®è¡ããŠãããã®ãšã©ãŒãæ€åºã§ãããã©ããã確èªãããã®ã§ããç®æšã¯ãçŸå®äžçã®ãã°ãæããããã¹ãã¹ã€ãŒãã®æå¹æ§ãè©äŸ¡ããããšã§ãã
ããã»ã¹ïŒ
- ãã¥ãŒã¿ã³ãã®çæïŒ æŒç®åã倿ŽïŒ`+`ã`-`ã«ïŒãæ¡ä»¶ãå転ïŒ`<`ã`>=`ã«ïŒããŸãã¯å®æ°ã眮ãæãããªã©ã®ãã¥ãŒããŒã·ã§ã³ãå°å ¥ããŠãã³ãŒãã®ä¿®æ£çãäœæããŸãã
- ãã¹ãã®å®è¡ïŒ åãã¥ãŒã¿ã³ãã«å¯ŸããŠãã¹ãã¹ã€ãŒããå®è¡ããŸãã
- çµæã®åæïŒ
- Killããããã¥ãŒã¿ã³ãïŒ ãã¥ãŒã¿ã³ãã«å¯ŸããŠãã¹ãã±ãŒã¹ã倱æããå Žåããã®ãã¥ãŒã¿ã³ãã¯ãKillãããããšèŠãªããããã¹ãã¹ã€ãŒãããšã©ãŒãæ€åºããããšã瀺ããŸãã
- çåãããã¥ãŒã¿ã³ãïŒ ãã¥ãŒã¿ã³ãã«å¯ŸããŠãã¹ãŠã®ãã¹ãã±ãŒã¹ãæåããå Žåããã®ãã¥ãŒã¿ã³ãã¯ãçåããããšèŠãªããããã¹ãã¹ã€ãŒãã®åŒ±ç¹ã瀺ããŸãã
- ãã¹ãã®æ¹åïŒ çåãããã¥ãŒã¿ã³ããåæãããããã®ãšã©ãŒãæ€åºããããã«ãã¹ãã±ãŒã¹ã远å ãŸãã¯ä¿®æ£ããŸãã
äŸïŒ
function add(a, b) {
return a + b;
}
ãã¥ãŒããŒã·ã§ã³ã¯`+`æŒç®åã`-`ã«å€æŽãããããããŸããïŒ
function add(a, b) {
return a - b; // Mutant
}
ãããã¹ãã¹ã€ãŒãã«ã2ã€ã®æ°å€ã®å ç®ãå ·äœçã«ãã§ãã¯ããæ£ããçµæãæ€èšŒãããã¹ãã±ãŒã¹ããªããã°ããã¥ãŒã¿ã³ãã¯çåãããã¹ãã«ãã¬ããžã®ã®ã£ãããæããã«ãªããŸãã
ãã¥ãŒããŒã·ã§ã³ã¹ã³ã¢ïŒ ãã¥ãŒããŒã·ã§ã³ã¹ã³ã¢ã¯ããã¹ãã¹ã€ãŒãã«ãã£ãŠKillããããã¥ãŒã¿ã³ãã®å²åã§ãããã¥ãŒããŒã·ã§ã³ã¹ã³ã¢ãé«ãã»ã©ããã广çãªãã¹ãã¹ã€ãŒãã瀺ããŸãã
éçïŒ ãã¥ãŒããŒã·ã§ã³ãã¹ãã¯ã倿°ã®ãã¥ãŒã¿ã³ãã«å¯ŸããŠãã¹ãã¹ã€ãŒããå®è¡ããå¿ èŠããããããèšç®ã³ã¹ããé«ããªããŸãããããããã¹ãå質ã®åäžãšãã°æ€åºã®èгç¹ããã®å©ç¹ã¯ãå€ãã®å Žåãã³ã¹ããäžåããŸãã
ã«ãã¬ããžçã®ã¿ã«çŠç¹ãåœãŠãããšã®èœãšã穎
ãã¹ãã«ãã¬ããžã¯äŸ¡å€ããããŸãããããããœãããŠã§ã¢å質ã®å¯äžã®å°ºåºŠãšããŠæ±ãããšãé¿ããããšãéèŠã§ããçç±ã¯ä»¥äžã®éãã§ãïŒ
- ã«ãã¬ããžã¯å質ãä¿èšŒããªãïŒ ãã¹ãã¹ã€ãŒãã¯ãé倧ãªãã°ãèŠéããªããã100%ã®åœä»€ç¶²çŸ ãéæããããšããããŸãããã¹ããæ£ããæ¯ãèããã¢ãµãŒãããŠããªãã£ããããšããžã±ãŒã¹ãå¢çæ¡ä»¶ãã«ããŒããŠããªãã£ããããå¯èœæ§ããããŸãã
- 誀ã£ãå®å¿æïŒ é«ãã«ãã¬ããžçã¯ãéçºè ã«èª€ã£ãå®å¿æãäžããæœåšçãªãªã¹ã¯ãèŠéããããããšã«ã€ãªãããŸãã
- ç¡æå³ãªãã¹ãã®å©é·ïŒ ã«ãã¬ããžãäž»èŠãªç®æšã«ãªããšãéçºè ã¯åã«ã³ãŒããå®è¡ããã ãã§ããã®æ£ãããå®éã«ã¯æ€èšŒããªããã¹ããæžããããããŸããããããã®ãèŠãããã®ããã¹ãã¯ã»ãšãã©äŸ¡å€ããªããå®éã®åé¡ãé ããŠããŸãããšãããããŸãã
- ãã¹ãå質ã®ç¡èŠïŒ ã«ãã¬ããžã¡ããªã¯ã¹ã¯ããã¹ãèªäœã®å質ãè©äŸ¡ããŸãããèšèšã®æªããã¹ãã¹ã€ãŒãã¯ãé«ãã«ãã¬ããžãæã¡ãªãããããã°ã®æ€åºã«ã¯å¹æããªãããšããããŸãã
- ã¬ã¬ã·ãŒã·ã¹ãã ã§ã®éæãå°é£ãªå ŽåãããïŒ ã¬ã¬ã·ãŒã·ã¹ãã ã§é«ãã«ãã¬ããžãéæããããšãããšãéåžžã«æéãšã³ã¹ãããããããšããããŸãããªãã¡ã¯ã¿ãªã³ã°ãå¿ èŠã«ãªãå Žåããããããã¯æ°ããªãªã¹ã¯ã䌎ããŸãã
ææçŸ©ãªãã¹ãã«ãã¬ããžã®ããã®ãã¹ããã©ã¯ãã£ã¹
ãã¹ãã«ãã¬ããžãçã«äŸ¡å€ã®ããã¡ããªã¯ã¹ã«ããããã«ã以äžã®ãã¹ããã©ã¯ãã£ã¹ã«åŸã£ãŠãã ããïŒ
1. éèŠãªã³ãŒããã¹ãåªå ãã
ã»ãã¥ãªãã£ãããã©ãŒãã³ã¹ããŸãã¯ã³ã¢æ©èœã«é¢é£ãããããªãæãéèŠãªã³ãŒããã¹ã«ãã¹ãã®åŽåãéäžãããŠãã ããããªã¹ã¯åæã䜿çšããŠãåé¡ãåŒãèµ·ããå¯èœæ§ãæãé«ãé åãç¹å®ãããããã®ãã¹ããåªå ããŸãã
äŸïŒ eã³ããŒã¹ã¢ããªã±ãŒã·ã§ã³ã®å Žåããã§ãã¯ã¢ãŠãããã»ã¹ã決æžã²ãŒããŠã§ã€é£æºããŠãŒã¶ãŒèªèšŒã¢ãžã¥ãŒã«ã®ãã¹ããåªå ããŸãã
2. ææçŸ©ãªã¢ãµãŒã·ã§ã³ãäœæãã
ãã¹ããåã«ã³ãŒããå®è¡ããã ãã§ãªãããããæ£ããåäœããŠããããšãæ€èšŒããããã«ããŠãã ãããã¢ãµãŒã·ã§ã³ã䜿çšããŠæåŸ ãããçµæããã§ãã¯ããåãã¹ãã±ãŒã¹ã®åŸã«ã·ã¹ãã ãæ£ããç¶æ ã«ããããšã確èªããŸãã
äŸïŒ å²åŒãèšç®ãã颿°ãåã«åŒã³åºãã ãã§ãªããè¿ãããå²åŒå€ãå ¥åãã©ã¡ãŒã¿ã«åºã¥ããŠæ£ããããšãã¢ãµãŒãããŸãã
3. ãšããžã±ãŒã¹ãšå¢çæ¡ä»¶ãã«ããŒãã
ãã°ã®åå ãšãªãããšãå€ããšããžã±ãŒã¹ãšå¢çæ¡ä»¶ã«ç¹ã«æ³šæãæã£ãŠãã ãããç¡å¹ãªå ¥åãæ¥µç«¯ãªå€ãäºæããªãã·ããªãªã§ãã¹ããè¡ããã³ãŒãã®æœåšçãªåŒ±ç¹ãæããã«ããŸãã
äŸïŒ ãŠãŒã¶ãŒå ¥åãåŠçãã颿°ããã¹ãããå Žåãç©ºã®æååãéåžžã«é·ãæååãç¹æ®æåãå«ãæååã§ãã¹ãããŸãã
4. ã«ãã¬ããžã¡ããªã¯ã¹ãçµã¿åãããŠäœ¿çšãã
åäžã®ã«ãã¬ããžã¡ããªã¯ã¹ã«äŸåããªãã§ãã ãããåœä»€ç¶²çŸ ãåå²ç¶²çŸ ãããŒã¿ãããŒã«ãã¬ããžãªã©ã®ã¡ããªã¯ã¹ãçµã¿åãããŠäœ¿çšãããã¹ãã®åãçµã¿ã«ã€ããŠããå æ¬çãªèŠç¹ãåŸãŸãã
5. ã«ãã¬ããžåæãéçºã¯ãŒã¯ãããŒã«çµ±åãã
ãã«ãããã»ã¹ã®äžéšãšããŠã«ãã¬ããžã¬ããŒããèªåçã«å®è¡ããããšã§ãã«ãã¬ããžåæãéçºã¯ãŒã¯ãããŒã«çµ±åããŸããããã«ãããéçºè ã¯ã«ãã¬ããžã®äœãé åãè¿ éã«ç¹å®ããç©æ¥µçã«å¯ŸåŠã§ããŸãã
6. ã³ãŒãã¬ãã¥ãŒã䜿çšããŠãã¹ãå質ãåäžããã
ã³ãŒãã¬ãã¥ãŒã䜿çšããŠãã¹ãã¹ã€ãŒãã®å質ãè©äŸ¡ããŸããã¬ãã¥ã¢ãŒã¯ãã«ãã¬ããžã¡ããªã¯ã¹ã ãã§ãªãããã¹ãã®æç¢ºããæ£ç¢ºããå®å šæ§ã«ãçŠç¹ãåœãŠãã¹ãã§ãã
7. ãã¹ãé§åéçº (TDD) ãæ€èšãã
ãã¹ãé§åéçº (TDD) ã¯ãã³ãŒããæžãåã«ãã¹ããæžãéçºã¢ãããŒãã§ããããã«ããããã¹ãããœãããŠã§ã¢ã®èšèšãé§åããããããããã¹ãããããã³ãŒããšããè¯ãã«ãã¬ããžã«ã€ãªããå¯èœæ§ããããŸãã
8. ããã€ãã¢é§åéçº (BDD) ãæ¡çšãã
ããã€ãã¢é§åéçº (BDD) ã¯ãã·ã¹ãã ã®æ¯ãèããå¹³æãªèšèã§èšè¿°ãããã®ããã¹ãã®åºç€ãšããŠäœ¿çšããããšã§TDDãæ¡åŒµããŸããããã«ãããéæè¡è ãå«ããã¹ãŠã®ã¹ããŒã¯ãã«ããŒã«ãšã£ãŠãã¹ããããèªã¿ããããçè§£ãããããªããŸããBDDã¯ãèŠä»¶ã«é¢ããæç¢ºãªã³ãã¥ãã±ãŒã·ã§ã³ãšå ±éçè§£ãä¿é²ãããã广çãªãã¹ãã«ã€ãªãããŸãã
9. çµ±åãã¹ããšãšã³ãããŒãšã³ããã¹ããåªå ãã
ãŠããããã¹ãã¯éèŠã§ãããç°ãªãã³ã³ããŒãã³ãéã®çžäºäœçšãã·ã¹ãã å šäœã®æ¯ãèããæ€èšŒããçµ±åãã¹ãããšã³ãããŒãšã³ããã¹ããæ ããªãã§ãã ããããããã®ãã¹ãã¯ããŠãããã¬ãã«ã§ã¯æããã«ãªããªããã°ãæ€åºããããã«äžå¯æ¬ ã§ãã
äŸïŒ çµ±åãã¹ãã§ã¯ããŠãŒã¶ãŒèªèšŒã¢ãžã¥ãŒã«ãããŒã¿ããŒã¹ãšæ£ãã飿ºããŠãŠãŒã¶ãŒã®è³æ Œæ å ±ãååŸããããšã確èªããå ŽåããããŸãã
10. ãã¹ãäžå¯èœãªã³ãŒãã®ãªãã¡ã¯ã¿ãªã³ã°ãæããªã
ãã¹ããå°é£ãŸãã¯äžå¯èœãªã³ãŒãã«ééããå Žåãããããããã¹ãããããããããã«ãªãã¡ã¯ã¿ãªã³ã°ããããšãæããªãã§ãã ãããããã«ã¯ã倧ããªé¢æ°ãããå°ããã¢ãžã¥ãŒã«åããããŠãããã«åå²ããããäŸåæ§æ³šå ¥ã䜿çšããŠã³ã³ããŒãã³ããåé¢ãããããããšãå«ãŸããå ŽåããããŸãã
11. ãã¹ãã¹ã€ãŒããç¶ç¶çã«æ¹åãã
ãã¹ãã«ãã¬ããžã¯äžåºŠããã®åãçµã¿ã§ã¯ãããŸãããã³ãŒãããŒã¹ãé²åããã«ã€ããŠããã¹ãã¹ã€ãŒããç¶ç¶çã«ã¬ãã¥ãŒããæ¹åããŠãã ãããæ°æ©èœããã°ä¿®æ£ãã«ããŒããããã«æ°ãããã¹ãã远å ããæ¢åã®ãã¹ãããªãã¡ã¯ã¿ãªã³ã°ããŠæç¢ºããšæå¹æ§ãåäžãããŸãã
12. ã«ãã¬ããžãšä»ã®å質ã¡ããªã¯ã¹ã®ãã©ã³ã¹ããšã
ãã¹ãã«ãã¬ããžã¯ããºã«ã®äžçã«ãããŸãããæ¬ é¥å¯åºŠã顧客æºè¶³åºŠãããã©ãŒãã³ã¹ãªã©ãä»ã®å質ã¡ããªã¯ã¹ãèæ ®ããŠããœãããŠã§ã¢å質ã®ããå šäœçãªèŠç¹ãåŸãŠãã ããã
ãã¹ãã«ãã¬ããžã«é¢ããã°ããŒãã«ãªèŠç¹
ãã¹ãã«ãã¬ããžã®ååã¯æ®éçã§ããããã®é©çšã¯å°åãéçºæåã«ãã£ãŠç°ãªãå ŽåããããŸãã
- ã¢ãžã£ã€ã«ã®æ¡çšïŒ äžçäžã§äººæ°ã®ããã¢ãžã£ã€ã«ææ³ãæ¡çšããŠããããŒã ã¯ãèªåãã¹ããšç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãéèŠããåŸåãããããã¹ãã«ãã¬ããžã¡ããªã¯ã¹ã®äœ¿çšãå¢å ããŠããŸãã
- èŠå¶èŠä»¶ïŒ ãã«ã¹ã±ã¢ãéèãªã©ã®äžéšã®æ¥çã§ã¯ããœãããŠã§ã¢ã®å質ãšãã¹ãã«é¢ããŠå³ããèŠå¶èŠä»¶ããããŸãããããã®èŠå¶ã§ã¯ãç¹å®ã®ã¬ãã«ã®ãã¹ãã«ãã¬ããžã矩åä»ããããããšããããããŸããäŸãã°ããšãŒãããã§ã¯ãå»çæ©åšãœãããŠã§ã¢ã¯IEC 62304èŠæ Œã«æºæ ããå¿ èŠããããããã§ã¯åŸ¹åºçãªãã¹ããšææžåãéèŠãããŠããŸãã
- ãªãŒãã³ãœãŒã¹ vs. ãããã©ã€ãšã¿ãªãœãããŠã§ã¢ïŒ ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã¯ãã³ãŒãå質ã確ä¿ããããã«ã³ãã¥ããã£ã®è²¢ç®ãšèªåãã¹ãã«å€§ããäŸåããŠããããšããããããŸãããã¹ãã«ãã¬ããžã¡ããªã¯ã¹ã¯ãã°ãã°å ¬éãããè²¢ç®è ããã¹ãã¹ã€ãŒããæ¹åããããšã奚å±ããŸãã
- ã°ããŒããªãŒãŒã·ã§ã³ãšããŒã«ãªãŒãŒã·ã§ã³ïŒ ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã®ãœãããŠã§ã¢ãéçºããå Žåãæ¥ä»ãæ°å€ã®åœ¢åŒãé貚èšå·ãæåãšã³ã³ãŒãã£ã³ã°ãªã©ã®ããŒã«ãªãŒãŒã·ã§ã³ã®åé¡ããã¹ãããããšãéèŠã§ãããããã®ãã¹ããã«ãã¬ããžåæã«å«ããã¹ãã§ãã
ãã¹ãã«ãã¬ããžæž¬å®ããŒã«
æ§ã ãªããã°ã©ãã³ã°èšèªãç°å¢ã§ãã¹ãã«ãã¬ããžã枬å®ããããã®å€æ°ã®ããŒã«ãå©çšå¯èœã§ãã人æ°ã®ãããªãã·ã§ã³ã«ã¯ä»¥äžã®ãããªãã®ããããŸãïŒ
- JaCoCo (Java Code Coverage): Javaã¢ããªã±ãŒã·ã§ã³åãã®åºã䜿çšãããŠãããªãŒãã³ãœãŒã¹ã®ã«ãã¬ããžããŒã«ã
- Istanbul (JavaScript): JavaScriptã³ãŒãçšã®äººæ°ã®ããã«ãã¬ããžããŒã«ã§ãMochaãJestãªã©ã®ãã¬ãŒã ã¯ãŒã¯ã§ãã䜿çšãããŸãã
- Coverage.py (Python): ã³ãŒãã«ãã¬ããžã枬å®ããããã®Pythonã©ã€ãã©ãªã
- gcov (GCC Coverage): Cããã³C++ã³ãŒãçšã®GCCã³ã³ãã€ã©ã«çµ±åãããã«ãã¬ããžããŒã«ã
- Cobertura: ããäžã€ã®äººæ°ã®ãããªãŒãã³ãœãŒã¹ã®Javaã«ãã¬ããžããŒã«ã
- SonarQube: ãã¹ãã«ãã¬ããžåæãå«ãã³ãŒãå質ã®ç¶ç¶çãªæ€æ»ã®ããã®ãã©ãããã©ãŒã ãæ§ã ãªã«ãã¬ããžããŒã«ãšçµ±åããå æ¬çãªã¬ããŒããæäŸã§ããŸãã
çµè«
ãã¹ãã«ãã¬ããžã¯ãœãããŠã§ã¢ãã¹ãã®ç¶²çŸ æ§ãè©äŸ¡ããããã®äŸ¡å€ããã¡ããªã¯ã¹ã§ããããœãããŠã§ã¢å質ã®å¯äžã®æ±ºå®èŠå ã§ãã£ãŠã¯ãªããŸãããæ§ã ãªçš®é¡ã®ã«ãã¬ããžããã®éçããããŠãããã广çã«æŽ»çšããããã®ãã¹ããã©ã¯ãã£ã¹ãçè§£ããããšã§ãéçºããŒã ã¯ããå ç¢ã§ä¿¡é Œæ§ã®é«ããœãããŠã§ã¢ãäœæã§ããŸããéèŠãªã³ãŒããã¹ãåªå ããææçŸ©ãªã¢ãµãŒã·ã§ã³ãäœæãããšããžã±ãŒã¹ãã«ããŒãããã¹ãã¹ã€ãŒããç¶ç¶çã«æ¹åããŠãã«ãã¬ããžã¡ããªã¯ã¹ããœãããŠã§ã¢ã®å質ãçã«åæ ããããã«ããããšãå¿ããªãã§ãã ãããåçŽãªã«ãã¬ããžçãè¶ ããããŒã¿ãããŒããã¥ãŒããŒã·ã§ã³ãã¹ããåãå ¥ããããšã§ããã¹ãæŠç¥ãå€§å¹ ã«åŒ·åã§ããŸããæçµçãªç®æšã¯ãå Žæãèæ¯ã«é¢ä¿ãªããäžçäžã®ãŠãŒã¶ãŒã®ããŒãºãæºãããããžãã£ããªäœéšãæäŸãããœãããŠã§ã¢ãæ§ç¯ããããšã§ãã